package com.qfedu.wfx.manager.service.Impl;

import com.qfedu.wfx.manager.dao.ModuleDAO;
import com.qfedu.wfx.manager.dao.RoleDAO;
import com.qfedu.wfx.manager.pojos.Level2Module;
import com.qfedu.wfx.manager.pojos.Level3Module;
import com.qfedu.wfx.manager.pojos.ParentModule;
import com.qfedu.wfx.manager.pojos.Role;
import com.qfedu.wfx.manager.service.IModule;
import com.qfedu.wfx.manager.service.IRole;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class RoleServiceImpl implements IRole {

    @Autowired
    private RoleDAO roleDAO;

    @Autowired
    private ModuleDAO moduleDAO;

    @Override
    public List<Role> listRoles() {
        return roleDAO.listRoles();
    }

    @Override
    public List<ParentModule> listModuleCodesByRoleId(String roleId) {
        List<ParentModule> parentModules = moduleDAO.listModels("admin");

        List<String> codes = roleDAO.listModuleCodesByRoleId(roleId);
        ParentModule parentModule;
        Level2Module level2Module;
        Level3Module level3Module;
        for (int i = 0;i<parentModules.size();i++){
            parentModule = parentModules.get(i);
            if(codes.contains(parentModule.getCode())){
                parentModule.getState().put("checked",true);
            }
            for (int j = 0 ;j<parentModule.getNodes().size();j++){
                level2Module = parentModule.getNodes().get(j);
                if (codes.contains(level2Module.getCode())){
                    level2Module.getState().put("checked",true);
                }
                for (int k = 0;k<level2Module.getNodes().size();k++){
                    level3Module = level2Module.getNodes().get(k);
                    if (codes.contains(level3Module.getCode())){
                        level3Module.getState().put("checked",true);
                    }
                }
            }
        }

        return parentModules;
    }

    public void grantModule(String roleId,String moduleCode){
        roleDAO.grantModule(roleId,moduleCode);
    }

    @Override
    public void delRole(String roleId, String moduleCode) {
        roleDAO.delRole(roleId,moduleCode);
    }
}
